草庐IT

c++ - 池化线程的 SetThreadAffinityMask

全部标签

c++ - 如何访问尚未开始运行的挂起线程的堆栈?

我想更改新创建的远程线程的堆栈,但在调用CreateRemoteThread创建处于挂起状态的线程时,堆栈尚未分配。我在创建挂起线程后使用GetThreadContext获取ESP的地址,但如果我在VS调试器的反汇编窗口中查看此地址,它尚未分配。此外,每次使用WriteProcessMemory写入此地址都会失败。如何编辑新创建但挂起的远程线程的堆栈? 最佳答案 当你获得线程句柄时,它的堆栈被分配,(以及TIB结构)。MSVS调试器可能会显示错误信息,所以不要依赖它。我不确定线程​​上下文是否有正确的值,也许是稍后设置的。你应该使用

c++ - 在 Visual Studio 2010 中的 "break all"之后,一些线程的调用堆栈在我的 C++ 程序中几乎缺失

我的跨平台C++应用程序(使用Juce)的最新版本在Windows中可能存在死锁或可以想象的无限循环,但在Mac中没有,不幸的是我们目前没有Windows开发人员,所以这取决于我.我可以在VisualStudio2010下运行该程序但出现问题,然后当我遇到“active丢失”时:-D我使用了“全部中断”命令,这似乎暂停了我的所有线程。很好,而且大多数堆栈都非常合理。不幸的是,有几个线程(包括我怀疑处于死锁状态的两个线程)没有可用的调用堆栈。我非常清楚我的堆栈的“顶部”不会在那里,因为我没有调试信息,例如ntdll.dll。但我似乎只是从堆栈的中间得到了一点点。我包括了一个不好的堆栈和一

c++ - 如何为在 MS VC++ 中开发的 C++ 程序分配特定部分的代码

我正在尝试使用这段代码将一段代码分配给一个独立的部分:#ifdef_MSC_VER#pragmasection(".evil",execute)#pragmacode_seg(".evil")#endif#ifdef__GNUC__static__attribute__((section(".evil")))#elifdefined_MSC_VERstatic__declspec(allocate(".evil"))#endifvoid__invoke__start(){//...但这不起作用,编译器说The__declspec(allocate())syntaxcanbeusedfo

c++ - 线程安全类的有序静态初始化

就结尾处的简短问题而言,这篇文章似乎太长了。但是我还需要描述一个我刚刚想出的设计模式。也许它很常用,但我从未见过它(或者它只是不起作用:)。首先,这里有一段代码(据我所知)由于“静态初始化顺序失败”而具有未定义的行为。问题是Spanish::s_englishToSpanish的初始化依赖于English::s_numberToStr,它们都是静态初始化的并且在不同的文件中,因此这些初始化的顺序是未定义的:文件:英文.h#pragmaonce#include#includeusingnamespacestd;structEnglish{staticvector*s_numberToSt

c - 如何将分钟添加到包含 UTC 时间的 struct tm?

set_time()函数应该获取特定时间并将指定的分钟数添加到该时间并将其保存在*t中。#include#includeenum{JAN,FEB,MAR,APR,MAY,JUNE,JULY,AUG,SEP,OCT,NOV,DEC};voidset_time(structtm*t,intyear,intmon,intday,inthour,intmin,intsec,intmins_to_add){/*Copyallthevalues.*/t->tm_year=(year-1900);t->tm_mon=mon;t->tm_mday=day;t->tm_hour=hour;t->tm_m

c - 将文本附加到编辑控件? (Windows API)

我用C语言创建了一个简单的窗体,并向其中添加了一些控件。但是对于编辑控件,我无法向其添加文本,就像列表框控件一样。我所能做的就是从编辑控件中获取文本,向其中添加所需的行,然后再次设置文本。这是我为完成这项工作而编写的代码。voidAddText(HWNDEditControl,char*NewData){intTextLen=GetWindowTextLength(EditControl);char*Result=malloc(TextLen+strlen(NewData)+1);if(Result==NULL)return;GetWindowText(EditControl,Resu

c++ - 从另一个线程终止 C++ 中的线程

基本上我是在用两个线程寻找素数。我将每个线程的可能素数范围分成两半,或者以其他方式在线程之间静态分配范围。然而,必须处理较小数字的线程将不可避免地在计算较大数字的线程之前完成。我想要做的是,只要任一线程通过它的范围,就终止两个线程,然后将尚未完成的线程的剩余范围的一半交给完成的线程,这样它们就会递归地平衡并且将始终并行运行。例如:A(1-100)和B(100-200),A先完成,而B仍在150。两者都停止,A开始像A(150-175),B像B(175-200)。到目前为止,这是我的代码:#include#include#include#include#include#includeus

c - Win32 中的 TIB 访问

深入研究与TIB(线程信息block)一起工作的Win32API函数的实现,例如:TLS访问函数:TlsAlloc、TlsFree、TlsSetValue、TlsGetValueGetLastError,SetLastError消息子系统:GetMessage、PeekMessage等通过读取fs:[0x18]选择器的内容,我们发现它们都访问了TIB,有时称为TEB(线程环境block)。OTOH这是不必要的,因为fs寄存器直接指向它。根据thisarticle我在实践中看到的是,fs寄存器保存了TIB结构开头的地址,而在偏移量0x18处它有一个指向自身的指针。间接访问TIB的原因可能

c++ - 是否可以使用内存缓冲区(或 PE 资源)来支持只读 SQLite 数据库?

我想使用Windows的“自定义资源”功能将存储在SQLite数据库中的相当大的数据block嵌入到我的二进制文件中。(这是一个日志记录工具的白名单)SQLite确实支持inmemorydatabases,但看起来这可能仅限于创建全新的数据库;并且似乎不支持从内存缓冲区读取;但我并不肯定。数据库是否支持这样的东西?(由于其他原因我必须嵌入SQLite,所以将它用于白名单也很棒......) 最佳答案 sqlite文档在线备份部分http://www.sqlite.org/backup.html有一些代码可以做你想做的事(即将内存数据

无法使用 fopen 读取 UTF8 编码的文件(文件, "r,ccs=UTF-8")

在使用fopen打开文件时,我使用ccs=encoding(如MSDN中所述)将编码设置为UTF-8。当写入文件时它工作正常wchar_t*unicode_text=L"こんにちは";FILE*f=fopen("C:\\test.txt","w,ccs=UTF-8");fwprintf(f,L"%s\n",unicode_text);fclose(f);当我在文本编辑器中打开文件时,unicode会正常显示。但是当尝试从创建的文件中读取时,未检测到UTF-8编码:wchar_tbuffer[1000];FILE*f=fopen("C:\\test.txt","r,ccs=UTF-8")